/* 
1. 自定义一个类型
2. unknown
-- 是 any 的安全类型, 可以被任意类型赋值，不支持从属性取值，不支持方法调用；
--  类型判断：没有传入类型时，默认会推导出 unknown 型
-- unknown 与其他任意类型一起作为联合类型，得到的都是 unknown 
-- unknown 与其他任意类型一起求交叉类型，得到的都是其他类型;
-- never 是 unknown 的子类型, 
-- unknown 不能使用 keyof ,  any 可以

 */

// --------------------------一个组件的饿接口有是哪个可先属性 name,age, company,  如果传了 name 就必须要传 age-------------

interface Test1 {
    age?: string,
    name?: string,
    company?: string
}
interface Test2 {
    age: string,
    name: string,
}

type NewType<T> = T extends { name: string } ? Test2 : Test1

function getFn<T>(v: NewType<T>) { }
let person = {}
getFn<typeof person>(person)
//---------------------------------------------------------------

// ----------------------never 是 unknown 的子类型------------------
type t2 = never extends unknown ? true : false // true
export { }